linux shell编程基础
2016-11-10 21:51
369 查看
1.变量
1)变量的分类
用户自定义变量环境变量:主要保存和系统操作环境相关的数据。
位置参数变量:主要用来向脚本当中传递参数或定义的
与定义变量:Bash中已经定义好的变量
2)用户自定义变量
变量调用: echo $x变量设置: set
变量删除: unset x
3)环境变量
设置环境变量export 变量名=变量值
查看环境变量
set:查看所有变量
env:查看环境变量
3)位置参数变量
参数说明参数 | 作用 |
---|---|
$n | n为数字,$0表示命令本身,$1-$9代表第一到第九个参数 |
$* | 代表命令行中所有的参数,$*把所有的参数看成一个整体 |
$@ | 命令行中所有参数,把每个参数区分 |
$# | 代表命令行中所有参数的个数 |
#!/bin/bash echo "parameter is: $* " echo "parameter also is: $@" echo "parameter number is: $#" echo "===============*===========" for i in "$*" do echo "the parameters is:$i" done echo "===============@=================" for i in "$@" do echo "the parameter is:$i" done
4)预定义变量
变量说明:变量 | 作用 |
---|---|
$? | 最后一次执行命令返回状态,0 表示争取为执行 |
$$ | 当前进程的PID |
$! | 后台运行的最后一个进程的PID |
-p “提示信息” :在等待read输入时,输出提示信息
-t “秒数”:read命令会一直等待用户输入,指定等待时间
-n “字符数”:read命令只接受指定的字符数,就会执行
-s:隐藏输入的数据,适用于机密信息的输入
2.Shell运算符
1)declare申明变量类型
选项-:给变量设定属性类型
+:取消变量的类型属性
-a:将变量申明为数组型
-i:整数型
-x:环境变量
-r:只读
-p:显示指定变量被声明的类型
2)“$((运算式)) 或“$[运算式]”
3.环境变量配置文件
1)source命令
重新加载配置文件2)配置文件加载顺序
3)其他配置文件
~/.bash_logout :退出登陆时加载的配置文件~/etc/issue : 登陆后的欢迎信息
~/etc/motd : 登陆后的欢迎信息
正则表达式
1)基础正则表达式
元字符 | 作用 |
---|---|
* | 前一个字符匹配一个或者多个 |
. | 匹配除了换行符外任意一个字符 |
^ | 匹配行首 例如”^hello” 匹配以”hello”开头的字符串 |
[] | 匹配中括号中的任意一个字符,例如:[aeiou]匹配任意一个元音字母,[0-9]匹配任意一位数字 |
[^] | 匹配除中括号字符以外的字符,例如[^0-9]匹配除了数字之外的字符 |
\ | 转义符 |
{n} | 表示前面一个字符出现n次,例如:[0-9]{4}匹配四位数字 |
{n,} | 匹配前面一个字符不小于n次 |
{n,\m} | 表示前面一个字符最少出现n次,最多出现m次 |
2)字符串截取命令
cut字段提取命令:-f n:截取第n列
-d “”:确定分隔符
3)printf输出内容
输出类型:- %ns:输出字符串 ,表示输出几个字符
- %ni:输出整数,n代表输出几个数字
- %m.nf:输出浮点数,m和n代表整数位数和小数位数
4)awk命令
格式:awk ‘条件1{动作1}条件2{动作2}…’文件名
例子:
cat /etc/passwd | grep /bin/bash | awk 'BEGIN{FS=":"}{print $1 "\t" $3}'
5)sed命令
格式:sed [选项] [动作] [文件名]
选项:
-n:只把经过sed处理过的行输出到屏幕
-e:允许对输入数据应用多条sed命令编辑
-i:用sed命令修改的结果直接修改读取的文件,而不是由屏幕输出
动作:
-a:追加,在当前行后添加一行或者多行
-c:行替换,用后面的字符串替换原数据行
-i:插入当前行插入一行或多行
-d:删除
-p:打印,输出指定的行
-s:字串替换
例子:
sed -n '2p' student.txt打印student.txt的第二行
sed '2,4d' student.txt删除第二到第四行
sed '2a test1 test1 test1 test1' student.txt在第二行添加内容
sed '4c cang bugide' student.txt替换第四行
6)排序命令sort
格式:sort [选项] 文件名
选项:
-f:忽略大小写
-n:以数值型进行排序
-r:反向排序
-t:指定分隔符(默认为制表符)
-k n[,m] :按照指定的字段范围排序
7)统计命令wc
格式:wc [选项] 文件名
选项
-l:只统计行数
-w:只统计单词数
-m:只统计字符数
条件判断与流程控制
1判断条件
1)按照文件类型进行判断
常用测试选项 | 作用 |
---|---|
-d 文件 | 判断给文件是否存在,并且是否为目录文件(是目录文件为真) |
-e 文件 | 判断文件是否存在(存在为真) |
-f 文件 | 判断文件是否存在,并且是否为普通文件(是普通文件为真) |
2)按照文件权限进行判断
测试选项 | 作用 |
---|---|
-r 文件 | 判断文件是否存在,并且是否该文件拥有读权限(有读权限为真) |
-w 文件 | 判断该文件是否存在,并且该文件是否拥有写权限(有写权限为真) |
-x 文件 | 判断该文件是否存在,并是否该文件拥有执行权限 |
3)两个文件进行比较
测试选项 | 作用 |
---|---|
文件1 -nt 文件2 | 判断文件1的修改时间是否比文件2新(如果新则为真) |
文件1 -ot 文件2 | 判断文件1的修改时间是否比文件2的旧(如果旧则为真) |
文件1 -ef 文件2 | 判断文件1是否和文件2的Inode号一致 |
4)两个整数之间比较
测试选项 | 作用 |
---|---|
整数1 -eq 整数2 | 判断整数1是否和整数2相等 |
-ne | 判断不相等 |
-gt | 大于 |
-lt | 小于 |
-ge | 大于等于 |
-le | 小于等于 |
5)字符串的判断
测试选项 | 作用 |
---|---|
-z 字符串 | 判断字符串是否为空(为空返回真) |
-n 字符串 | 判断字符串是否为非空 |
字符串1 == 字符串2 | 判断两个字符串是否相等 |
字符传1 != 字符串2 | 判断字符串1是否和字符串2不相等 |
2.条件判断的例子
判断磁盘利用率是否大于10%#!/bin/bash test=$( df -h | grep sda2 | awk '{print $5}' | cut -d "%" -f 1) if [ "$test" -gt 10 ] then echo "the use is greater 10%" fi
判断输入是否为文件
#!/bin/bash read -p "Please input a filename : " file if [ -z "$file" ] then echo "Error,please input filename" exit 1 elif [ ! -e "$file" ] then echo "Your input is not a file" exit 2 elif [ -f "$file" ] then echo "$file is a a regulare file" elif [ -d "$file" ] then echo "$file is a directory!!" fi
判断apache是否启动
#!/bin/bash test=$(ps aux | grep httpd | grep -v grep) if [ -n "$test" ] then echo "$(date) httpd is ok!" >> /tmp/autostart-acc.log else service httpd start &> /dev/null echo "$(date) reastart httpd !!" >> /tmp/autostart-err.log fi
case选择
#!/bin/bash echo "feng : input 1" echo "fu : input 2" echo "bo : inpit 3" read -t 30 -p "please input " cho case "$cho" in "1") echo "feng" ;; "2") echo "fu" ;; "3") echo "bo" ;; *) echo "please input right choice" ;; esac
3 for循环例子
批量添加用户#!/bin/bash read -p "Please input username " -t 30 name read -p "Please input the number of users " -t 30 num read -p "Please input the password of users:" -t 30 pass if [ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ] then y=$(echo $num | sed 's/[0-9]//g') if [ -z "$y" ] then for((i=1;i<=$num;i=i+1)) do /usr/sbin/useradd $name$i &>/dev/null echo $pass | /usr/bin/passed --stdion $name$i &> /dev/null done fi fi
相关文章推荐
- Linux Shell 编程基础
- linux shell编程基础(二)
- Linux Shell编程基础
- Linux Shell编程基础
- Linux Shell编程基础
- linux shell 编程 基础
- Linux Shell编程(基础教程)
- Linux Shell编程(一)--Shell编程基础
- Linux Shell编程基础
- Linux Shell编程基础
- linux shell编程基础(三)
- Linux Shell编程基础
- linux shell编程基础1
- Linux Shell编程基础
- Linux Shell编程基础
- linux shell编程基础(一)
- linux shell编程基础
- Linux Shell编程(基础教程)(转载)
- Linux Shell编程(基础教程)
- Linux Shell编程(基础教程)