linux shell 总结
时间:2015-01-19 12:59 来源:linux.it.net.cn 作者:IT
1、#!指定执行脚本的shell 如果不写的话,用系统默认的shell s shell是所有linux ,unix都支持的
2、#开始的行表示注释(不限于行首)
命令建议写绝对路径
执行:
./example.sh
sh example.sh
date +%F
临时变量:shell内部定义的,范围程序本身
永久变量:环境变量
$PATH :默认搜索路径,环境变量
$LANG 当前支持的语言环境
$SHELL 当前shell
$PS1
变量以字母和下划线开头,区分大小写,一般都为大写
注意:变量赋值时等号两边没有空格
TIME=$(data+%F) <==> TIME=`data+%F)`
当字符串中间有空格时需要用引号引起来,没有则可以不用引
echo NAME = 'songjiankang'
双引号中变量的值会解析,单引号中的则不会
set 查看环境变量和自定义变量
删除变量:unset NAME
变量只有在使用的时候才会加 "$"
特殊的变量:
位置变量 命令$0, 后面$1~9 是在脚本执行的时候后面传进去的
echo $? 如果为0执行成功,如果非0,有问题 (上一个命令执行的返回值)
$* 这个程序的所有参数
$# 这个程序的参数个数
$$ 执行这个脚本程序的PID
$! 执行上一个后台命令的PID
$? 执行上一个命令的返回值
注意:这些变量都是在脚本中用的
$# is : 2
$* is : a b
$? is : 0
$$ is : 3765
$0 is : demo.sh
把需要执行的放到shell脚本中,然后计划任务去执行脚本
read 从键盘读入数据,赋值给变量
脚本测试:
read one two three #一个变量名或多个变量名
echo 'first--'$one
echo 'two --'$two
echo 'three--'$three
sh -x read.sh 调试 显示代码执行的过程
sh -n read.sh 检测语法错误
如果参数过少,后面的参数接到的空,如果输入的参数过多,会把多余的参数都放到最后一个参数里
变量的算数运算 expr 对整数进行运算,舍去法取整
注意: expr 3 + 8 运算符两边是有空格的
注意乘号需要转义 expr 2 \* 3
var7=expr `expr 9 + 5`/$var4
变量参数语句:参数变量是否相等,是否为空,文件类型
test str1 = str2 #注意两边有空格
test str1 != str2
if [测试语句 ]; then #注意 [] 两边必须有空格 ,then 如果和if在一行必须加分号
[code]
else
[code]
fi
______________________________________________
if [测试]
then
[code]
elif []
then
[code]
else
[code]
fi
exit 0 //退出脚本 0 表示正常退出,非0表示非常出退出
————————————————————————————————————————————————————————
for 变量 in 名字表
do
命令列表
done
awk:信息分段提取命令
#查找是root的用户
awk -F : '$3==0 {print $1}' /etc/passwd
#查找密码为空的用户
awk -F : 'length($2)==0 {print $1}' /etc/passwd
grep 如果找不到的话会返回非零值
_______________________________________________________
select 变量 in 名字表 #没有break则会一直循环
do
命令列表
break
done
________________________________________________________
op=$1
case "$op" in#引号可有可无
stop) #引号可有可无
echo "stop"
;;
restart)
echo restat
;;
*)
echo "usage:sdf"
esac
——————————————————————————————————————————————————————
echo 123456 passwd --stdin mysql
shift:参数左移
函数增加了代码的可能性
脚本可以让用户执行:
sh方式:
1、对脚本有r权限
2、对脚本所在目录有rx权限
直接执行脚本方式:
1、对脚本有rx权限
2、对脚本所在目录有rx权限
———————————————————————————————————————————————————————
检测nginx是否运行
web=`pgrep nginx`
if [ "$web" = "" ]
then
echo "nginx is not running"
else
echo "nginx is running。。。。"
fi
_____________________________________________________________________________________________________
histor -c 清除历史
!命令 执行离最近的那条以命令开头的命令
set 查看所有变量
env 查看全局变量
echo "aaa${a}aaaaa"
export 变量名 #使其成为全局的
find / 搜索全部文件
for循环
for((i=0;i<19;i++))
do
echo $i
done
let i++ 只能递增1
______________________________________
ll &>error.txt 错误和正确都输出到里
~/.bashrc: 存放别名记录
~/.bash_history 存放历史记录
!ps #执行最近一次的以ps开头的命令
修改 history 记录历史的长度:/etc/profile 中 HISTSIZE=1000 参数
abc${song}def #包含变量名
export varname #把一个局部变量提升为一个全局变量
cat <<end
s
j
k
end
环境变量
全局:/etc/profile
局部:~/.bash_profile
常见的环境变量:
$USER, $LOGNAME
$UID, $SHELL, $HOME,
$PWD, $PATH
$PS1:[\u@\h \W]\$
$PS2:敲错以后进入的符号
chmod a+x 文件名 三个用户都增加执行权限
[ -d /etc/init.d/ ] && echo "yes"
echo $?
dfnum=df -hT |awk 'NR==4{print int($5)}' #打印第五行第四列
[ $dfnum -lq 20 ]&& echo "yes"
read -p "please intpu you name :" name #输入的内容会被name获取到
service mysqld status &>/dev/null
echo $? #判断是否启动,返回值在mysqld中
for((i=0;i<5;i++))
do
echo $i
sleep 1
done
#纯数学运算的简写
let i++
i=$(($i+2))
函数名 参数1 参数2 。。。。
add(){
echo $1
echo $2
}
add 1 2
add 2 3
man test 查看test测试的用法
(责任编辑:IT)
1、#!指定执行脚本的shell 如果不写的话,用系统默认的shell s shell是所有linux ,unix都支持的 2、#开始的行表示注释(不限于行首) 命令建议写绝对路径 执行: ./example.sh sh example.sh date +%F 临时变量:shell内部定义的,范围程序本身 永久变量:环境变量 $PATH :默认搜索路径,环境变量 $LANG 当前支持的语言环境 $SHELL 当前shell $PS1 变量以字母和下划线开头,区分大小写,一般都为大写 注意:变量赋值时等号两边没有空格 TIME=$(data+%F) <==> TIME=`data+%F)` 当字符串中间有空格时需要用引号引起来,没有则可以不用引 echo NAME = 'songjiankang' 双引号中变量的值会解析,单引号中的则不会 set 查看环境变量和自定义变量 删除变量:unset NAME 变量只有在使用的时候才会加 "$" 特殊的变量: 位置变量 命令$0, 后面$1~9 是在脚本执行的时候后面传进去的 echo $? 如果为0执行成功,如果非0,有问题 (上一个命令执行的返回值) $* 这个程序的所有参数 $# 这个程序的参数个数 $$ 执行这个脚本程序的PID $! 执行上一个后台命令的PID $? 执行上一个命令的返回值 注意:这些变量都是在脚本中用的 $# is : 2 $* is : a b $? is : 0 $$ is : 3765 $0 is : demo.sh 把需要执行的放到shell脚本中,然后计划任务去执行脚本 read 从键盘读入数据,赋值给变量 脚本测试: read one two three #一个变量名或多个变量名 echo 'first--'$one echo 'two --'$two echo 'three--'$three sh -x read.sh 调试 显示代码执行的过程 sh -n read.sh 检测语法错误 如果参数过少,后面的参数接到的空,如果输入的参数过多,会把多余的参数都放到最后一个参数里 变量的算数运算 expr 对整数进行运算,舍去法取整 注意: expr 3 + 8 运算符两边是有空格的 注意乘号需要转义 expr 2 \* 3 var7=expr `expr 9 + 5`/$var4 变量参数语句:参数变量是否相等,是否为空,文件类型 test str1 = str2 #注意两边有空格 test str1 != str2 if [测试语句 ]; then #注意 [] 两边必须有空格 ,then 如果和if在一行必须加分号 [code] else [code] fi ______________________________________________ if [测试] then [code] elif [] then [code] else [code] fi exit 0 //退出脚本 0 表示正常退出,非0表示非常出退出 ———————————————————————————————————————————————————————— for 变量 in 名字表 do 命令列表 done awk:信息分段提取命令 #查找是root的用户 awk -F : '$3==0 {print $1}' /etc/passwd #查找密码为空的用户 awk -F : 'length($2)==0 {print $1}' /etc/passwd grep 如果找不到的话会返回非零值 _______________________________________________________ select 变量 in 名字表 #没有break则会一直循环 do 命令列表 break done ________________________________________________________ op=$1 case "$op" in#引号可有可无 stop) #引号可有可无 echo "stop" ;; restart) echo restat ;; *) echo "usage:sdf" esac —————————————————————————————————————————————————————— echo 123456 passwd --stdin mysql shift:参数左移 函数增加了代码的可能性 脚本可以让用户执行: sh方式: 1、对脚本有r权限 2、对脚本所在目录有rx权限 直接执行脚本方式: 1、对脚本有rx权限 2、对脚本所在目录有rx权限 ——————————————————————————————————————————————————————— 检测nginx是否运行 web=`pgrep nginx` if [ "$web" = "" ] then echo "nginx is not running" else echo "nginx is running。。。。" fi _____________________________________________________________________________________________________ histor -c 清除历史 !命令 执行离最近的那条以命令开头的命令 set 查看所有变量 env 查看全局变量 echo "aaa${a}aaaaa" export 变量名 #使其成为全局的 find / 搜索全部文件 for循环 for((i=0;i<19;i++)) do echo $i done let i++ 只能递增1 ______________________________________ ll &>error.txt 错误和正确都输出到里 ~/.bashrc: 存放别名记录 ~/.bash_history 存放历史记录 !ps #执行最近一次的以ps开头的命令 修改 history 记录历史的长度:/etc/profile 中 HISTSIZE=1000 参数 abc${song}def #包含变量名 export varname #把一个局部变量提升为一个全局变量 cat <<end s j k end 环境变量 全局:/etc/profile 局部:~/.bash_profile 常见的环境变量: $USER, $LOGNAME $UID, $SHELL, $HOME, $PWD, $PATH $PS1:[\u@\h \W]\$ $PS2:敲错以后进入的符号 chmod a+x 文件名 三个用户都增加执行权限 [ -d /etc/init.d/ ] && echo "yes" echo $? dfnum=df -hT |awk 'NR==4{print int($5)}' #打印第五行第四列 [ $dfnum -lq 20 ]&& echo "yes" read -p "please intpu you name :" name #输入的内容会被name获取到 service mysqld status &>/dev/null echo $? #判断是否启动,返回值在mysqld中 for((i=0;i<5;i++)) do echo $i sleep 1 done #纯数学运算的简写 let i++ i=$(($i+2)) 函数名 参数1 参数2 。。。。 add(){ echo $1 echo $2 } add 1 2 add 2 3 man test 查看test测试的用法
(责任编辑:IT) |