赞
踩
目录
既是一种应用程序,又是一种程序设计语言,解释语言
shell是用户和Linux内核之间的接口程序
如果是没有可执行权限
chmod +x 01_shell.sh
1、 ./01_shell.sh //子shell里执行,#!指定的解析器解析,如果没指定,使用系统默认
2、. 01_shell.sh //当前shell里执行,#!指定的解析器解析和系统默认不同,采用系统默认的解析器
3、bash 01_shell.sh //子shell里执行,bash解析器优先级高于#!后指定的解析器
安装 dos2unix
sudo apt install dos2unix
1、使用dos2unix转换文件格式
dos2unix XX_SHELL.sh
2、用vim打开文件,在命令行模式下:
set ff=unix
1、配置文件/etc/profile,所有用户有效
2、~/.bashrc ,当前用户有效
变量名=变量值
引用变量
$变量
- #!/bin/bash
- num=100
- echo "num=$num"
使用unset命令清除变量
unset varname
- #!/bin/bash
- num=100
- echo "num=$num"
- unset num
- echo "num=$num"
- #!/bin/bash
- readonly num=100
- echo "num=$num"
- num=1000
- echo "num=$num"
read string:从键盘输入一个字符串付给变量string
- #!/bin/bash
- read -p "请输入数据:" data
- echo "data=$data"
查看系统环境变量:env
export var=300
使用export说明的变量,会被导出为环境变量,其它shell均可使用
变量名只能包含英文字母下划线,不能以数字开头,定义变量时“=”两边不能有空格
- #!/bin/bash
- export DATA=1000
通过env也能查看到设置的环境变量
env>a.txt
- #!/bin/bash
- echo "参数个数:$#"
- echo "参数内容:$*"
- echo "参数1:$1"
- echo "参数2:$2"
- echo "参数3:$3"
- echo "参数4:$4"
- echo "进程名:$0"
- echo "进程号:$$"
- read data
- #指定解析器
- #!/bin/bash
- #查看当前目录下的文件
- #echo "当前目录下有哪些文件:`ls -a`"
- #查看当前进程
- echo "当前进程:`ps -a`"
- #!/bin/bash
- echo -e "1234354545\tbcded"
- echo -e "########\n#########"
- #!/bin/bash
- num=100
- (
- #子shell num=500 echo "()内的num=$num"
- )
- echo "()外的num=$num"
- {
- num=1000 echo "{}内的num=$num"
- }
- echo "{}外的num=$num"
test condition 或[ condition ]
- -e 是否存在 -d 是目录 -f 是文件
-
- -r 可读 -w 可写 -x 可执行
-
- -L 符号连接 -c 是否字符设备 -b是否块设备
-
- -s 文件非空
- #!/bin/bash
- read -p "请输入文件名:" filename
- test -e $filename
- #条件表达式1
- echo "$?"
-
- [ -d $filename ]
- #条件表达式2
- echo "$?"
- test str_operator “str”
-
- test “str1” str_operator “str2”
-
- [ str_operator “str” ]
-
- [ “str1” str_operator “str2”]
-
- 其中str_operator可以是:
-
- = 两个字符串相等 != 两个字符串不相等
-
- -z 空串 -n 非空串
- #!/bin/bash
- read -p "请输入字串1: " str1
- read -p "请输入字串2: " str2
- test -z $str1 #空串
- echo "$?"
- test -n $str2 #非空
- echo "$?"
- [ $str1 = $str2 ] #串1和串2相等
- echo "$?"
- [ $str1 != $str2 ] #串1和串2相等
- echo "$?"
3、数字测试
测试数值格式如下:
- test num1 num_operator num2
-
- [ num1 num_operator num2 ]
-
- num_operator可以是:
-
- -eq 数值相等
-
- -ne 数值不相等
-
- -gt 数1大于数2
-
- -ge 数1大于等于数2
-
- -le 数1小于等于数2
-
- -lt 数1小于数2
- #!/bin/bash
- read -p "请输入数字1: " num1
- read -p "请输入数字2: " num2
- [ $num1 -gt $num2 ]
- echo "$?"
- [ $num1 -le $num2 ]
- echo "$?"
4、复合测试
命令执行控制:
&&:
command1 && command2
&&左边命令(command1)执行成功(即返回0)shell才执行&&右边的命令(command2)
||
command1 || command2
||左边的命令(command1)未执行成功(即返回非0)shell才执行||右边的命令(command2)
- #!/bin/bash
- read -p "请输入数字(50~100): " num
- [ $num -ge 50 -a $num -le 100 ]
- echo "$?"
- read -p "请输入文件: " file
- [ -d $file -o -e $file ]
- echo "$?"
格式一:
- if [条件1]; then
- 执行第一段程序
- else
- 执行第二段程序
- fi
格式二:
- if [条件1]; then
- 执行第一段程序
- elif [条件2];then
- 执行第二段程序
- else
- 执行第三段程序
- fi
- #!/bin/bash
- read -p "请输入一个分数: " num
- if [ $num -ge 60 -a $num -lt 80 ];then
- echo "合格"
- elif [ $num -ge 80 -a $num -lt 90 ];then
- echo "良好"
- elif [ $num -ge 90 -a $num -le 100 ];then
- echo "优秀"
- else
- echo "不合格"
- fi
case 控制语句格式
- case $变量名称 in
- “第一个变量内容”) 程序段一
- ;; //break
- “第二个变量内容”) 程序段二
- ;; //brak;
- *) //default
- 其它程序段
- exit 1
- esac
- #!/bin/bash
- read -p "请输入一个分数(10分制) " num
- case $num in
- 0|1|2|3|4|5)
- echo "不合格"
- ;;
- 6)
- echo "合格"
- ;;
- 7|8)
- echo "良好"
- ;;
- 9|10)
- echo "优秀"
- ;;
- *)
- echo "无效分数"
- exit 1
- esac
形式一:
- for (( 初始值; 限制值; 执行步阶 ))
- do
- 程序段
- done
形式二:
- for var in con1 con2 con3 ...
- do
- 程序段
- done
是bash的一个内建命令,可以用来声明shell变量、设置变量的属性。declare也可以写作typeset。
- declare -i s 代表强制把s变量当做int型参数运算。
-
- #!/bin/bash
- declare -i i
- declare -i sum
- for ((i=0;i<=100;i++))
- do
- sum=$sum+$i;
- done
- echo "sum=$sum"
扫描文件夹下的所有文件
- #!/bin/bash
- for file in `ls`
- do
- echo "$file"
- done
- while [ condition ]
- do
- 程序段
- done
- #!/bin/bash
- declare -i i=0
- declare -i sum=0
- while [ $i -le 100 ]
- do
- sum=$sum+$i
- i=$i+1
- done
- echo "sum=$sum"
- until [ condition ]
- do
- 程序段
- done
这种方式与while恰恰相反,当condition成立的时候退出循环,否则继续循环。
- #!/bin/bash
- declare -i i=0
- declare -i sum=0
- until [ $i -gt 100 ]
- do
- sum=$sum+$i
- i=$i+1
- done
- echo "sum=$sum"
- #!/bin/bash
- declare -i i=0
- declare -i sum=0
- while [ $i -le 100 ]
- do
- if [ $i -eq 50 ];then
- break
- fi
- sum=$sum+$i
- i=$i+1
- done
- echo "sum=$sum"
- #!/bin/bash
- declare -i i=0
- declare -i sum=0
- while [ $i -lt 100 ]
- do
- i=$i+1
- if [ $i -eq 50 ];then
- continue
- fi
- sum=$sum+$i
- done
- echo "sum=$sum"
格式一:
函数名() { 命令 ... }
格式二:
function 函数名() { 命令 ... }
- #!/bin/bash #函数的定义
- declare -i sum=0 #将变量sum强制转换成整型
- function my_add() {
- sum=$1+$2
- echo "sum=$sum"
- } #函数的调用
- my_add 10 20
19_shell.sh (函数定义)
- #!/bin/bash #函数的定义
- declare -i sum=0 #将变量sum强制转换成整型
- function my_add() {
- sum=$1+$2
- echo "sum=$sum"
- }
20_shell.sh(函数调用)
- #!/bin/bash
- source 19_shell.sh #函数的调用
- my_add 50 50
函数调用:
- #!/bin/bash
- source 19_shell.sh #函数的调用
- my_add 50 50
- echo "sum=$?"
函数定义:
- #!/bin/bash #函数的定义
- declare -i sum=0 #将变量sum强制转换成整型
- function my_add() {
- sum=$1+$2
- #echo "sum=$sum"
- return $sum
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。